package arithmetic1.sparseArray;

/*
    二维数组与稀疏数组的相互转换
 */
public class SparseArray {
    public static void main(String[] args) {
        int arr[][]=new int[11][11];
        arr[1][2]=1;
        arr[2][3]=2;
        int[][] sparsrArr=changeSparse(arr);
        System.out.println("稀疏数组为:");
        for(int[] arr1:sparsrArr){
            for (int num:arr1){
                System.out.print(num+"\t");
            }
            System.out.println();
        }
        System.out.println("二维数组为:");
        int arr1[][]=changeArr(sparsrArr);
        for(int arri[]:arr1){
            for(int num:arri){
                System.out.print(num+"\t");
            }
            System.out.println();
        }
    }

    //将二维数组转换成稀疏数组
    public static int[][] changeSparse(int arr[][]){
        int num=0;
        //遍历数组得到不为0的个数
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[i].length;j++){
                if(arr[i][j]!=0){
                    num++;
                }
            }
        }
        //根据遍历结果创建稀疏数组
        int sparseArr[][]=new int[num+1][3];
        sparseArr[0][0]=arr.length;
        sparseArr[0][1]=arr[0].length;
        sparseArr[0][2]=num;
        //遍历二维数组给稀疏数组赋值
        int count=1;
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[i].length;j++){
                if(arr[i][j]!=0){
                    sparseArr[count][0]=i;
                    sparseArr[count][1]=j;
                    sparseArr[count][2]=arr[i][j];
                    count++;
                }
            }
        }
        return sparseArr;
    }

    //将稀疏数组转换为二维数组
    public static int[][] changeArr(int[][] sparseArr){
        //根据稀疏数组第一行数据创建二维数组
        int arr[][]=new int[sparseArr[0][0]][sparseArr[0][1]];
        //遍历稀疏数组为二维数组赋值
        for(int i=1;i<sparseArr.length;i++){
            arr[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
        }
        return arr;
    }


}
